package com.amapv2.apis.util;

import android.content.Context;
import android.util.Log;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;

/**
 * 定位的工具类
 */
public class LocationUtils {

    private static final String TAG = LocationUtils.class.getSimpleName();

    /**
     * 获得定位方法
     * @param context
     * @param location
     */
    public static void getLocation(Context context, final LocationResult location) {

        //1、设置定位对象
        final AMapLocationClient mlocationClient = new AMapLocationClient(context);

        //2、设置定位监听
        mlocationClient.setLocationListener(new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation amapLocation) {
                if (amapLocation != null) {
                    Log.e(TAG,"定位成功");
                    try{
                        location.value(amapLocation);
                    }catch (Exception e){
                        Log.e(TAG,"定义执行的会回调发生错误");
                    }finally {
                        //finally用的太好了，将定位关别了和销毁了。
                        Log.e(TAG,"销毁定位服务");
                        mlocationClient.stopLocation();
                        mlocationClient.onDestroy();//销毁定位客户端，同时销毁本地定位服务。
                    }
                }
            }
        });

        //3、设置定位参数，声明mLocationOption对象
        AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
        //设置定位模式为高精度模式，Battery_Saving为低功耗模式，Device_Sensors是仅设备模式
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //设置定位间隔,单位毫秒,默认为2000ms
        mLocationOption.setInterval(2000);
        //设置定位参数
        mlocationClient.setLocationOption(mLocationOption);
        // 此方法为每隔固定时间会发起一次定位请求，为了减少电量消耗或网络流量消耗，
        // 注意设置合适的定位时间的间隔（最小间隔支持为1000ms），并且在合适时间调用stopLocation()方法来取消定位请求
        // 在定位结束后，在合适的生命周期调用onDestroy()方法
        // 在单次定位情况下，定位无论成功与否，都无需调用stopLocation()方法移除请求，定位sdk内部会移除

        //4、启动定位
        mlocationClient.startLocation();
    }

    /**
     * 定位结果的回调
     */
    public interface LocationResult {
        void value(AMapLocation amapLocation);
    }

}
